#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <sys/time.h>
#include "../../src/thread.h"

double getTime(){
  struct timeval tv;
  gettimeofday(&tv,NULL);
  return 1000*tv.tv_sec+tv.tv_usec/1000.0;
}

static void * pthreadfunc(void * arg)
{
  char *name = arg;
  printf("je suis le pthread %p crée avec %s\n",
	 (void*) pthread_self(), name);
  pthread_exit(NULL);
}

static void * threadfunc(void * arg)
{
  char *name = arg;
  printf("je suis le thread %p crée avec %s\n",
	 (void*) thread_self(), name);
  thread_exit(NULL);
  
}

int main(){
  //les deux threads 
  pthread_t pth;
  thread_t th;
  int err;

  printf("\n le main lance 2 threads...\n\n");
  
  //on cree le thread avec pthread.h
  double t1 = getTime();
  err = pthread_create(&pth,NULL,pthreadfunc,"pthread.h");
  assert(!err);
  err = pthread_join(pth,NULL);
  assert(!err);
  double t2 = getTime();
  printf("Cout de création et attente avec pthread.h: %g\n\n",t2-t1);
  
  //on cree le thread avec thread.h
  double t3 = getTime();
  err = thread_create(&th, threadfunc, "thread.h");
  assert(!err);
  err = thread_join(th,NULL);
  assert(!err);
  double t4 = getTime();
  printf("Cout de création et attente avec thread.h: %g\n\n", t4-t3);
  return EXIT_SUCCESS;
}
